#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QDebug>
#include <QTextEdit>
#include <QMdiSubWindow>
#include <QIcon>
#include <QKeySequence>
#include <QActionGroup>
#include <QToolButton>
#include <QSpinBox>
#include <QLabel>

#include "myaction.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    // 菜单栏的 ui 界面方式添加

    /////////////// 菜单栏的代码方式添加
    QMenu* editMenu = ui->menubar->addMenu(tr("编辑(&E)"));
    editMenu->addSeparator(); // 加一个分割线(横向的分割线)
    QAction* action_open = editMenu->addAction(QIcon(":/res/edit.png"), tr("打开文件(&O)"));
    action_open->setShortcut(QKeySequence("Ctr+O")); // 接一个快捷键
    connect(action_open, &QAction::triggered, this, &MainWindow::on_actionEdit_triggered);

    QActionGroup* group = new QActionGroup(this); // 动作组
    QAction* action_L = group->addAction("左对齐(&L)");
    action_L->setCheckable(true);
    QAction* action_R = group->addAction("右对齐(&L)");
    action_R->setCheckable(true);
    QAction* action_C = group->addAction("居中(&L)");
    action_C->setCheckable(true);
    editMenu->addSeparator(); // 加一个分割线(横向的分割线)
    editMenu->addAction(action_L);
    editMenu->addAction(action_R);
    editMenu->addAction(action_C);

    // 把自定义的菜单项返回的 splitter 加入到我们 MainWindow 上的菜单上面去
    MyAction* action = new MyAction(this);
    editMenu->addSeparator(); // 加一个分割线(横向的分割线)
    editMenu->addAction(action);
    // 别人的信号  自己的槽函数
    connect(action, &MyAction::getTextSignal, this, &MainWindow::slot_set_text);

    /////////////// 工具栏的代码方式添加
    QToolButton* toolButton = new QToolButton(this);
    toolButton->setText(tr("颜色"));
    ui->toolBar->addWidget(toolButton);
    QMenu* colorMenu = new QMenu(this);
    colorMenu->addAction(tr("红色"));
    colorMenu->addSeparator(); // 也是可以添加分割线的哦(横向的分割线)
    colorMenu->addAction(tr("黑色"));
    toolButton->setMenu(colorMenu);
    toolButton->setPopupMode(QToolButton::MenuButtonPopup); // 虽然是添加到工具栏里面了，但是不设置菜单栏的弹出凡是的话，点击是没有什么反应的哦
    ui->toolBar->addSeparator(); // 添加的竖行的分割线
    QSpinBox* spinBox = new QSpinBox(this);
    ui->toolBar->addWidget(spinBox);
    ui->toolBar->addSeparator(); // 添加的竖行的分割线


    /////////////// 状态栏的代码方式添加
    this->init_status_bar();
}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_actionshowdock_D_triggered() // 击了"显示Dock"后会显示我门设置的"工具箱"
{
    qDebug() << "show dockWidget" << Qt::endl; // 先用 debug 的方式打印看一下是否点击了"显示Dock"后会显示我门设置的"工具箱"
    ui->dockWidget->show();
}


void MainWindow::on_action_N_2_triggered() // 击了"新建文件"后会响应我们设置的 QMdiArea 设置子窗口
{
    QTextEdit* textEdit = new QTextEdit(this);
    auto childWindow = ui->mdiArea->addSubWindow(textEdit);
    childWindow->setWindowTitle(tr("文本编辑子窗口"));
    childWindow->show();
}

void MainWindow::on_actionEdit_triggered(){
    qDebug() << "show on_actionEdit_triggered" << Qt::endl;
    ui->dockWidget->show();
}

void MainWindow::slot_set_text(const QString& string){
    ui->textEdit->setText(string); // 把输入的内容设置到 textEdit 内
}

// 状态栏的代码方式添加
void MainWindow::init_status_bar(){
    ui->statusbar->showMessage(tr("欢迎使用多文档编辑器"), 2000); // 后面的是一个 timeout 的一个过期时间（临时显示的状态标签）

    // 永久显示的状态标签
    QLabel* parmnant = new QLabel(this);
    parmnant->setFrameStyle(QFrame::Box | QFrame::Sunken); // 设置边框的样式类型
    parmnant->setText(tr("ax 020913"));
    ui->statusbar->addPermanentWidget(parmnant); // permanent: 永久性
}
